//  公用配置
const path = require('path')
let html = require('html-webpack-plugin')
let { CleanWebpackPlugin } = require('clean-webpack-plugin')
let webpack = require('webpack')
const cssExact = require('mini-css-extract-plugin')
module.exports = {
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, '../dist'),
    filename: 'index.[contenthash:8].js',
    assetModuleFilename: 'imgs/[name][ext]'
  },
  externals: {
    axios: 'axios', // 属性名是要在资源代码中import的那个包的名字 属性值是一个全局变量
    qqq: 'axios',
  },
  resolve: {
    alias: {
      "@": path.resolve(__dirname, '../src'),
      'api': path.resolve(__dirname, '../src/api')
    },
    extensions: ['.js', '.json', '.less', '.css', '.vue', '.jsx', '.tsx'],
    modules: [path.resolve(__dirname, '../src/plugin'), 'node_modules']
    // .vue 
  },
  plugins: [
    // webpack的插件都是一个类
    new html({
      template: './public/index.html',// 指定这个html文件作为我们的html模板
      title: "珠峰培训",
      qqq: 6666888,
      filename: "index.html",// 控制生成的html文件的名字
      minify: true,// 压缩生成的html 文件
      hash: true,// 控制的是引入的css或者js后边添加?hash
    }),
    new CleanWebpackPlugin(),
    new webpack.DefinePlugin({
      // 定义一些编译阶段全局变量
      QQQ: "'qqq'"
    }),
    new cssExact({
      filename: 'index.[contenthash:8].css'
    }),
    new webpack.ProvidePlugin({
      myqqq: 'lodash', // qqq 是在模块中要使用的变量  loadash 是安装的包的名字
      lodash: 'lodash'
    })
  ],
  module: {
    // loader的加载顺序是从右向左 从下往上的；
    rules: [
      {
        test: /\.css$/,//匹配哪些以css结尾的文件
        // use: ['style-loader', 'css-loader']
        use: [cssExact.loader, 'css-loader', 'postcss-loader']
      },
      {
        test: /\.less$/,
        use: [cssExact.loader, 'css-loader', 'less-loader', 'postcss-loader']
      },
      {
        test: /\.(jpg|png)$/,
        type: "asset/resource"
      },

    ]
  }
}